#!/usr/bin/env python3
"""
x265 MCP Server

面向 x265 视频编码器软件的 MCP 服务器，提供命令行操作的封装。

MCP tools 列表：
1. x265_version - 获取 x265 版本信息
   参数：无
   返回：包含版本信息的统一 JSON 结构

2. x265_encode - 使用 x265 编码视频
   参数：
     - input_file: 输入视频文件路径
     - output_file: 输出编码后文件路径
     - preset: 编码预设（如 medium, fast, slow）
     - crf: 恒定质量因子（0-51，默认23）
   返回：编码执行结果的统一 JSON 结构

3. x265_info - 获取 x265 编码器信息和参数选项
   参数：无
   返回：包含编码器信息的统一 JSON 结构
"""

from mcp.server.fastmcp import FastMCP, Context
import subprocess
import json
from typing import Optional

mcp = FastMCP("x265 MCP Server")

@mcp.tool()
def x265_version() -> dict:
    """
    获取 x265 编码器的版本信息
    
    返回：
        dict: 统一 JSON 结构，包含执行结果
        {
            "success": bool,
            "command": str,
            "exit_code": int,
            "stdout": str,
            "stderr": str
        }
    """
    cmd = ["x265", "--version"]
    result = subprocess.run(cmd, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(cmd),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def x265_encode(input_file: str, output_file: str, preset: str = "medium", crf: int = 23) -> dict:
    """
    使用 x265 编码视频文件
    
    参数：
        input_file (str): 输入视频文件路径
        output_file (str): 输出编码后文件路径
        preset (str): 编码预设，控制编码速度和质量平衡（如 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow, placebo）
        crf (int): 恒定质量因子，范围 0-51，值越小质量越高（默认23）
    
    返回：
        dict: 统一 JSON 结构，包含执行结果
        {
            "success": bool,
            "command": str,
            "exit_code": int,
            "stdout": str,
            "stderr": str
        }
    """
    cmd = [
        "x265",
        "--input", input_file,
        "--output", output_file,
        "--preset", preset,
        "--crf", str(crf)
    ]
    
    result = subprocess.run(cmd, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(cmd),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

@mcp.tool()
def x265_info() -> dict:
    """
    获取 x265 编码器的详细信息和可用参数选项
    
    返回：
        dict: 统一 JSON 结构，包含执行结果
        {
            "success": bool,
            "command": str,
            "exit_code": int,
            "stdout": str,
            "stderr": str
        }
    """
    cmd = ["x265", "--help"]
    result = subprocess.run(cmd, capture_output=True, text=True)
    
    return {
        "success": result.returncode == 0,
        "command": " ".join(cmd),
        "exit_code": result.returncode,
        "stdout": result.stdout,
        "stderr": result.stderr
    }

if __name__ == "__main__":
    mcp.run()